package com.customization.unionpay.contract.serivce;

import java.util.List;
import java.util.Map;

/**
 * @author mr_d
 * @Date 2024/7/17
 **/
public interface IContractBaseService {

    /**
     * 营销事项申请表单
     * @contractNo 合同号
     * @amount 内部出资金额、
     *          供应商名称
     *          合同经办人
     *
     * @return 需要回传：虚拟合同号、执行明细（一行）
     */
    String marketingApply(List<String> contractNo,String amount,String supplierName,Integer userId);

    /**
     * 营销共享合同集主表数据存储
     * @param userId SQ申请人(SQ申请组织、SQ申请部门)
     * @param filingDate SQ归档日期
     * @param activityName SQ单活动名称
     * @param shareNo SQ单：共享合同编号
     * @param contractNo 关联合同号
     * @param sQAmount SQ金额（内部出资金额）
     * @param signatories SQ单供应商名称
     * @return
     */
    String marketingAdd(Integer userId, String filingDate, String activityName, String shareNo, String sQAmount, List<String> contractNo, List<String> signatories);

    /**
     * 营销共享合同集付款计划台账
     * @param htbh 合同编号
     * @param amount 计划付款金额
     * @param dept 计划责任部门
     * @return
     */
    boolean marketingPlanAdd(String htbh,String amount, String dept);

    /**
     * 营销事项申请表单
     * @param operateType 1 提交 2 回退 3 归档
     * @param contractDetailNo 2 合同号明细行号-履约明细号
     * @param amount
     * 提交 回退 审批中金额
     * 归档时，[内部出资金额]写入合同明细行[已付款(含SQ 申请)金额]和[内部出资累计金额]，扣减[审批中金额]
     *
     */
    void updateAmountFunded(Integer operateType ,Integer contractPlanId,String amount);


    /**
     * 核销报账流程
     * 本次核销金额 -》 列帐金额
     * 根据履约明细号
     * @params code 履约明细号
     *
     */
    void updateHX(Integer contractPlanId , String amount);


    /**
     * 营销预付款单
     *  流程提交时，【预付金额】写入合同台账【审批中金额】和【已占用合同计提金额】，考虑回退
     *  流程归档时，【预付金额】写入合同明细行【已付款（含SQ申请）金额】，扣减【审批中金额】
     *  @param operateType 1 提交 2 回退 3 归档
     * @param contractPlanId 合同付款计划明细id
     *
     */
    void updateJTZY(Integer operateType,Integer contractPlanId, String amount);

    /**
     * 营销预付款核销单
     *  流程提交时【本次核销合同计提金额】扣减合同【计提余额】,考虑回退
     *  流程归档时，营销预付款核销单-流程归档时，报账金额写入【列账金额】
     *  @param operateType 1 提交 2 回退 3 归档
     *  @param contractPlanId 合同明细行id
     *
     */
    void updateLZJE(Integer operateType,Integer contractPlanId , String amount);

    /**
     * 操作共享合同状态  关联 取消关联
     * 更新支付合同台帐
     *
     * @param contractIdList 合同id列表
     * @param operateType 操作类型 0 未关联 2 已关联
     */
     void syncGXStatus(List<String> contractIdList, Integer operateType);

    /**
     * --------------------------
     * 收入/应收模块调用
     * --------------------------
     */

    /**
     * 收入-应收
     * 根据合同收款计划id查询收款信息
     * 返回收款计划明细
     * @param planId 收款计划明细
     * @param params 需要查询的字段，逗号连接
     * 合同名称	htmc	单行文本
     * 合同编号（浏览框）	htbh	自定义单选
     * 合同关联编号	htglbh	自定义单选
     * 合同收款预设标的额	htskysbde	浮点数
     * 收款计划编号	sfkjhbh	单行文本
     * 履约开始时间	lykssj	年月
     * 履约结束时间	lyjssj	年月
     * 计划收款日期	jhskrq	年月
     * 收入合同大类	skhtlbsrywdl	自定义树形单选
     * 收入业务小类	srywlxsrwxl	自定义树形单选
     * 经济事项	jjsx	自定义树形单选
     * 核算科目	hskm	自定义树形单选
     * 收款条件	sktj	单行文本
     * 计划收款金额	jhskje	浮点数
     * 可抵扣税率	kdksl	浮点数
     * 计划收款不含税金额	jhskbhsje	浮点数
     * 收入报账金额	srbzje	浮点数
     * 预收报账金额	ysbzje	浮点数
     * 预收结转金额	ysjzje	浮点数
     * 收款金额	skje	浮点数
     * 计划责任部门	jhzrbm	部门
     * 计划责任人	jhzrr	人力资源
     * 计划责任机构	jhzrjg	分部
     * 报账单号	bzdh	单行文本
     * 收款时间	sksj	日期
     * 报账人	bzr	人力资源
     * 报账中金额	bzzje	浮点数
     * 未报账金额	wbzje	浮点数
     * 收款报账日期	skbzrq	日期
     * 收款报账单号	skbzdh	单行文本
     * 收款报账人	skbzr	人力资源
     * 合同编号	htwb	单行文本
     * 合同状态	htzt	选择框-下拉框
     * 分摊规则	ftgz	选择框-下拉框
     * 对账结算周期	dzjszq	选择框-下拉框
     * 是否已报账	sfybz	选择框-下拉框
     *
     */
    Map<String,Object> getSKContractPlanDetailById(Integer planId,String params);


    /**
     *
     * 获取收入合同台帐数据
     * @param id
     * @param params
     * @return
     *合同名称    htmc	单行文本
     * 合同编号	htbh	单行文本
     * 合同关联编号	htglbh	单行文本
     * 合同承办机构名称	htcbjgmc	分部
     * 合同承办部门名称	htcbbmmc	部门
     * 合同承办人员姓名	htcbryxm	人力资源
     * 合同管理机构名称	htgljgmc	分部
     * 合同管理部门名称	htglbmmc	部门
     * 合同管理人	htglr	多人力资源
     * 合同归档日	htgdr	日期
     * 合同签订时间	htqdsj	日期
     * 合同到期日	htdqr	日期
     * 合同收款预设标的额	htskysbde	浮点数
     * 已用印合同附件	yyyhtfj	附件上传
     * 主合同编号	zhtbh	单行文本
     * 关联主合同	glzht	自定义单选
     * 合同律审备注	htlsbz	单行文本
     * 合同备案时间	htbasj	日期
     * 收支匹配合同信息	szpphtxx	自定义多选
     * 关联净收入实体合体	gljsrstht	自定义多选
     * 收入框架协议	srkjxy	自定义多选
     * 合同原币总金额	htybzje	浮点数
     * 合同汇率	hthl	浮点数
     * 合同不含税金额	htbhsje	浮点数
     * 核算部门	hsbm	部门
     * 合同备案流程	htbalc	流程
     * 收入报账金额	srbzje	浮点数
     * 预收报账金额	ysbzje	浮点数
     * 预收结转金额	ysjzje	浮点数
     * 收款金额	skje	浮点数
     * 签约方名称（废弃）	qyfmcllk	单行文本
     * 合同签订币种	htqdbz	自定义单选
     * 报账中金额	bzzje	浮点数
     * 未报账金额	wbzje	浮点数
     * 收款报账日期	skbzrq	日期
     * 收款报账单号	skbzdh	单行文本
     * 收款报账人	skbzr	人力资源
     * 账套	zt	单行文本
     * 合同收付款关系	htsfkgx	选择框-下拉框
     * 合同业务类型	htywlx	选择框-下拉框
     * 合同属性	htzx	选择框-下拉框
     * 合同数据来源	htsjly	选择框-下拉框
     * 合同状态	htzt	选择框-下拉框
     * 合同种类	htzl	选择框-下拉框
     * 合同关联信息	htglxx	选择框-下拉框
     * 核算单位	hsdw	分部
     * 合同类型	htlx	选择框-下拉框
     *
     *
     */
    Map<String,Object> getSKContractDetailById(Integer id,String params);

    /**
     * 根据收款计划编号 更新收入报账金额/预收报账金额
     * @param planId
     * @param type 0 收入 1 预收
     * @param amount  金额
     * @return
     *
     */
    boolean updateContractPlanById(Integer planId, Integer tableType,Integer type,String amount);

    /**
     * 更新收入合同收款计划台账的履约开始时间、履约结束时间、收款计划时间的方法，
     * @param planId 计划id
     * @param lYStartDate  履约开始时间
     * @param lYEndDate 履约结束时间
     * @param planDate 收款计划时间
     */
    boolean updateContractPlanDateById(Integer planId,String lYStartDate,String lYEndDate,String planDate);


    Map<String,Object> checkSigner(Map params);


    void createSKDetail(Integer planId, String lyStartTime, String lyEndTime, String skPlanDate, String planAmount, String skAmount);

    void updateHx(Integer lymxh, String bchxje);

    void syncGxStatus(List<String> list, int i);
}
